package com.zzyl.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.zzyl.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.ibatis.type.Alias;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * 请假表实体类
 */
@Data
@ApiModel(description = "请假实体类")
public class Leave extends BaseEntity {
    private Long id;                     // 请假id
    private String leaveNo;                 // 请假编号
    private Long elderId;              // 外键，关联elder表
    private String title;                   // 标题
    private String name;                    // 老人姓名
    private String phone;                   // 联系方式
    private String idCardNo;                // 身份证号
    private Long companionType;           // 陪同人类型(家属、护理人员、其他、无)
    private String companionName;           // 陪同人姓名
    private String companionPhone;          // 陪同人联系方式
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime leaveStart;                // 请假开始时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime leaveEnd;                  // 请假结束时间
    private Long leaveDays;              // 请假天数
    private String leaveReason;             // 请假原因
    private String applicat;                // 申请人
    private Long applicatId;             // 申请人id
    private LocalDateTime createTime;                // 申请时间
    private Integer status;
    private Integer flowStatus;             // 流程状态（0申请假、1申请审批、2请假审批）
    private LocalDateTime actualReturnTime;          // 实际返回时间
    private String returnRemark;            // 返回备注
    private Integer actualLeaveDays;        // 实际请假天数
    private String nursingLevelName;        // 护理等级
    private String bedNo;                   // 入住床位
    private String nursingName;
    private Integer type;  // 状态（1请假中、2超时未归、3已返回）
    //@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")// 护理员名称
    /**
     * 任务ID
     */
    @ApiModelProperty(value = "任务ID")
    private String taskId;
    private LocalDateTime leaveTime;                  // 请假时间


    //状态枚举类
    @Alias("LeaveFolwStatus")
    public enum FlowStatus{
        APPLY(0),
        REVIEW(1),
        APPROVAL(2 );
        Integer code;

        FlowStatus(Integer code){
            this.code = code;
        }
        public Integer getCode(){
            return this.code;
        }
    }

    //状态枚举类
    @Alias("LeaveStatus")
    public enum Status{
        APPLICATION(1),
        FINISHED(2),
        CLOSED(3);
        Integer code;
        Status(Integer code){
            this.code = code;
        }
        public Integer getCode(){
            return this.code;
        }
    }

    //状态枚举类
    @Alias("LeaveType")
    public enum Type{
        APPLICATION(1),
        FINISHED(2),
        CLOSED(3);
        Integer code;
        Type(Integer code){
            this.code = code;
        }
        public Integer getCode(){
            return this.code;
        }
    }
}